home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGSCAL / TSC.LZH / TSC.DOC < prev    next >
Text File  |  1988-01-28  |  23KB  |  602 lines

  1. TURBO SYNTAX CHECKER
  2. --------------------
  3. Version 4.1A
  4. Copyright (C) 1988 by Pradeep Arora (Supratech Inc.).
  5. All rights reserved.
  6.  
  7. Please send all communications or suggestions to the address below.
  8.  
  9.  
  10. CONDITIONS ON USING THIS SOFTWARE
  11. ---------------------------------
  12.  
  13. This is NOT a free software.
  14.  
  15. This copy of software is being distributed under the shareware concept of
  16. marketing software. You are allowed to distribute unmodified copies of this
  17. software for a modest fee provided you mention the shareware concept
  18. to the buyer and convey the fact that any use use of this software other
  19. than for testing purposes requires that a copy be registered with
  20. the author by paying the required fee.
  21.  
  22. This is NOT a public domain program. You are allowed to try out the
  23. program for free. Any further use requires that you register your copy
  24. for $25 registration fee. Registration entitles you to obtain further
  25. updates of this software for free. Source code consists of over
  26. 10,000 lines of well documented Turbo Pascal v4.0 code which is available
  27. for an additional source code license fee of $25.
  28.  
  29. Please send me a check or money order only. No credit cards please.
  30. My business address is:
  31.  
  32. Supratech Inc.
  33. Attn: Pradeep Arora
  34. P.O. Box 54622
  35. Oklahoma City, OK 73154
  36.  
  37. TECHINCAL SUPPORT FOR REGISTERED USERS
  38. --------------------------------------
  39.  
  40. I can support only the registered users on as available basis only through
  41. the following media:
  42.  
  43. Compuserve: EasyPlex to [76446,526]
  44.  
  45. Phone: (405) 329 1403
  46.    MONDAY to FRIDAY
  47.       Leave a message during day time (9am to 6pm). I can return your call
  48.          as CALL COLLECT (only) next day.
  49.       6pm to 8pm central time (Monday to Friday Evenings Only).
  50.    SATURDAY
  51.       9am to 5pm central time.
  52.    SUNDAY
  53.       Sorry, but I am busy on Sundays.
  54.  
  55. Mail:
  56.     Pradeep Arora
  57.     P.O. Box 53251
  58.     Oklahoma City, OK 73152
  59.  
  60.  
  61. WHAT TSC PROGRAM DOES?
  62. ----------------------
  63. The most important features of TSC program are:
  64.  
  65.   It finds all syntax errors in a single pass through source code. This
  66.     error report generated from TSC program can be directed to any of
  67.     three reporting methods: to screen, to printer, or to an error file.
  68.     You can select any combination for reporting, even all three at the
  69.     same time. TSC can check complete programs or individual units.
  70.  
  71.   It allows development of source code using the numeric coprocessor
  72.     data types (SINGLE, DOUBLE, EXTENDED and COMP) on a machine which
  73.     does not have a coprocessor (8087 or 80287 or 80387) installed.
  74.  
  75. Turbo Syntax Checker (TSC) is a tool designed to work together
  76. with Borland International's Turbo Pascal v4.0 compiler. TSC is meant
  77. for the user who feels frustrated by Turbo Pascal's insistence on
  78. recompiling entire files again even for the most minor mistakes. If
  79. you are trying to convert an application from other languages or from
  80. version 3 of Turbo Pascal, you will benefit from multiple errors
  81. located by TSC for you.
  82.  
  83. TSC program can load your compiler settings from wither of TURBO.TP or
  84. TPC.CFG files. This minimizes efforts required to use it.
  85.  
  86. There are certain limitations to what TSC can do. Please see "TECHNICAL
  87. NOTES AND CAPABILITIES DISCUSSION" chapter for details.
  88.  
  89. TRADEMARKS
  90. ----------
  91. The following trademarks are used throughout this manual. When you
  92. come across them, please remember that they are the registered
  93. trademarks of the companies shown below.
  94.  
  95. IBM, IBM PC, IBM PC XT and IBM PC AT are trademarks of International
  96. Business Machines Corporation.
  97.  
  98. MS-DOS is a trademarks of Microsoft Corporation.
  99.  
  100. Turbo Pascal is a trademark of Borland International.
  101.  
  102. TDebug Plus is a trademark of Turbo Power Software.
  103.  
  104. Mach2 is a trademark of MicroHelp Inc.
  105.  
  106.  
  107. HARDWARE REQUIREMENTS
  108. ---------------------
  109.  
  110. * IBM PC, XT, AT or close compatible running DOS 2.x or later.
  111. * 125K RAM available when invoking the TSC program.
  112. * 80 column monitor.
  113. * Optionally, a printer for printing error reports.
  114.  
  115.  
  116. FILES ON THE DISK
  117. -----------------
  118.  
  119. READ.ME     - Read this before proceeding.
  120. TSC.EXE     - The main TSC program file.
  121. TSC.DOC     - This file that you are reading.
  122. SYSTEM.TDL  - Library file to load in SYSTEM unit definitions.
  123. DOS.TDL     - Library file to load in DOS unit definitions.
  124. PRINTER.TDL - Library file to load in PRINTER unit definitions.
  125. CRT.TDL     - Library file to load in CRT unit definitions.
  126. GRAPH.TDL   - Library file to load in GRAPH unit definitions.
  127. TURBO3.TDL  - Library file to load in TURBO3 unit definitions.
  128. GRAPH3.TDL  - Library file to load in GRAPH3 unit definitions.
  129.  
  130.  
  131. INSTALLATION
  132. ------------
  133.  
  134. In short, just use TSC program like any other program you run from the DOS
  135. command line prompt.
  136.  
  137. There is no special install program that you need to run to be able to
  138. start using the TSC program. All you have to do is copy TSC program
  139. files to a directory and then use the "TSC MainFile.Ext"
  140. command from the DOS prompt.
  141.  
  142. TSC program needs the .TDL files for supporting the standard units.
  143. If you are using DOS3.x, TSC program will first look for its support
  144. files in directory where TSC.EXE is located.
  145. It then looks for these files in the current directory, and then
  146. along the Turbo Files path as specified via the command line or in
  147. TURBO.TP or TPC.CFG files. This logic is same as the one used by the
  148. Turbo Pascal compiler programs, TURBO.EXE or TPC.EXE.
  149.  
  150. We recommend that you copy these files to either the directory where
  151. your Turbo Pascal compiler files are or put them in a separate directory
  152. and then for DOS2.x set the Turbo Path to this directory using the /T
  153. command line switch or by using the TURBO.TP or the TPC.CFG files.
  154.  
  155.  
  156. USING TSC PROGRAM
  157. -----------------
  158.  
  159. TSC program is used from the DOS command line by entering a command as per
  160. the following syntax:
  161.  
  162. TSC [Switches] MainFile
  163.  
  164. Remember to separate the [Switches] if you are using any, from word TSC
  165. on command line by a space and also separate MainFile from earlier part
  166. of the command line by preceding it with a space. A horizontal tab can
  167. also be used instead of space.
  168.  
  169. TSC program first proceeds with its initialization and then will proceed
  170. with checking MainFile program/unit source file for errors. It will
  171. add a default extension of .PAS to MainFile if no extension was given. To
  172. use a FileName without any extension use a period '.' at its end.
  173.  
  174. Switches are used to override or modify what TSC program does by virtue of
  175. its factory settings. These switches are discussed in the following
  176. "Command Line Switches" chapter. For first time use you may try to use
  177. the TSC program without any switches and then use those switches that
  178. you may need to.
  179.  
  180. If you find that you are consistently using a particular switch, it may
  181. save you time to write a DOS batch file to invoke the TSC program. Consult
  182. your DOS User's Guide for details.
  183.  
  184. Proper initialization of TSC program requires that certain data
  185. be read from SYSTEM.TDL file. This file is always processed first
  186. as a library file, before checking of your source program can
  187. begin.
  188.  
  189. Whenever a source program request a unit be used, via the USES
  190. statement, TSC program first looks to see if it has already been
  191. processed.  If not, a file name with .PAS extension is searched for
  192. the unit. If that is also not found, a library file with .TDL
  193. extension is located. If that too fails, a file not found error
  194. message is generated.
  195.  
  196. COMMAND LINE SWITCHES
  197. ---------------------
  198.  
  199. There are several command line switches through which you can give TSC
  200. instructions about modifying the current session. The scheme that we
  201. have used resembles the one used by TPC.EXE or TURBO.EXE compiler
  202. programs. This should facilitate your use of TSC program.
  203.  
  204. The TSC program syntax (to repeat ourselves) is,
  205. TSC [Switches] MainFile
  206.  
  207. The switches listed below are recognized as being legal by TSC program.
  208. All other switches are treated as errors and TSC program will halt
  209. with an error message. You must in that case correct the command you gave
  210. to run TSC and try again.
  211.  
  212. Switches are started by leaving a space after the word TSC on the command
  213. line. MainFile should also be separated from the switches by a space.
  214. To use a switch type it in as shown below in the table. All switches are
  215. a single word in their entirety and may not contain any spaces/tabs.
  216. You may as many switches as you want to, by just putting them one after the
  217. other. You do not have to put a space in between the switches but you may do
  218. so if you want to. The '/' char is enough to tell TSC program that a
  219. new switch has been requested.
  220.  
  221.  
  222. Switch    What It Tells TSC Program To Do           Factor Setting
  223.  
  224. /CFG      Use TPC.CFG file for initializing         NO
  225.           By default, TSC program uses TURBO.TP
  226.           file for program defaults.
  227.  
  228. /NOPAUSE  Do not wait for user to press <Esc>
  229.           after each error is reported. Used
  230.           when obtaining reports to
  231.  
  232.  
  233. /87       Override 8087 detection to allow          NO
  234.           development of source code using
  235.           numeric coprocessor data types.
  236. /NO87     No numeric coprocessor data types.        NO
  237.  
  238.           Default here is automatic detection
  239.           of coprocessor. Any switch setting
  240.           applies to all units processed in the
  241.           current session.
  242.  
  243. /NOCRT    Suppress report to screen                 NO
  244.           Used when you want no report
  245.           on screen but still on the two listed
  246.           below.
  247. /LST      Error report to printer                   NO
  248.           TSC program uses the standard unit
  249.           PRINTER for this purpose.
  250.  
  251. /ERRF     Error report to error file                NO
  252.           TSC creates a file called TSCERRF.$$$
  253.           in the current directory. Any existing
  254.           file of the same name would be deleted
  255.           and a new one created.
  256.  
  257.           The above three options of /NOCRT,
  258.           /LST and /ERRF are processed in the sequence
  259.           they are put on the command line.
  260.           You may also select more than one method
  261.           of error reporting, at the same time
  262.           by giving TSC program the switches for
  263.           your choices.
  264.  
  265. /B        Check all units completely for            NO
  266.           errors. This means check both the
  267.           INTERFACE and the IMPLEMENTATION
  268.           parts.
  269. /M        Do a make of MainFile specified.          YES
  270.           TSC will find errors in INTERFACE
  271.           part only of the units that are used
  272.           by the MainFile. To have TSC program
  273.           check the IMPLEMENTATION part too,
  274.           use the /B switch.
  275.  
  276. /W9       A switch reserved for technical support   NO
  277.           of TSC program.
  278.  
  279. /DDefines_List
  280.           Add conditional defines to the factory
  281.           set defines list. Defines_List is a
  282.           list of directive names that you want to
  283.           have defined for all of the units that
  284.           will be processed in this session. It is
  285.           a list of names separated by ';' char.
  286.           These names are added on to those that
  287.           are predefined and those that are set by
  288.           use of TURBO.TP or TPC.CFG files.
  289.  
  290. /TTurbo_Files_Path
  291.           Add Turbo_Files_Path to where the files
  292.           used by TSC program will be looked for.
  293.           These are the TURBO.TP, TPC.CFG
  294.           and all of the .TDL library files.
  295.           Turbo_Files_Path is a list of directories
  296.           separated by ';' char.
  297.  
  298. /UUnit_Files_Path
  299.           Add Unit_Files_Path to where the unit
  300.           files that are for units in USES statment
  301.           will be looked for. Unit_Files_Path is
  302.           a list of directories separated by
  303.           ';' char.
  304.  
  305. /IInclude_Files_Path
  306.           Add Include_Files_Path to where the files
  307.           that are used with $I compiler directive
  308.           will be looked for. Include_Files_Path is a
  309.           list of directories separated by
  310.           ';' char.
  311.  
  312. /OObj_Files_Path
  313.           Add Obj_Files_Path to where the external
  314.           assembler produced '.OBJ' files will
  315.           be looked for. These are used with the
  316.           link in file, the $L, compiler directive.
  317.           Obj_Files_Path is a list of directories
  318.           separated by ';' char.
  319.  
  320. /$B+      Override the $B flag as set by factory
  321. /$B-      settings or the TURBO.TP or TPC.CFG
  322.           files.
  323.  
  324. /$D+      Override the $D flag.
  325. /$D-
  326.  
  327. /$F+      Override the $F flag.
  328. /$F-
  329.  
  330. /$I+      Override the $I flag.
  331. /$I-
  332.  
  333. /$L+      Override the $L flag.
  334. /$L-
  335.  
  336. /$N+      Override the $N flag.
  337. /$N-
  338.  
  339. /$R+      Override the $R flag.
  340. /$R-
  341.  
  342. /$S+      Override the $S flag.
  343. /$S-
  344.  
  345. /$T+      Override the $T flag.
  346. /$T-
  347.  
  348. /$V+      Override the $V flag.
  349. /$V-
  350.  
  351. The directives that start with '/$' characters can also be listed
  352. together without the use of '/$' characters but by using a comma ','
  353. to separate them.
  354. For example, '/$B+/$R+/$N-' and '/$B+,R-,N-' and '/$B+,R-/$N-'
  355. all three are equivalent and have exactly the same effect.
  356. These are discussed in detail on page 182 of your Turbo Pascal
  357. manual.
  358.  
  359. Here are some examples to clarify how you could use command line
  360. switches.
  361.  
  362. TSC /B PorgramA
  363.  
  364.     This command line means to check ProgramA.PAS file for errors
  365.     and check all units that it uses.
  366.  
  367. TSC /M ProgramA
  368.  
  369.     This command line means to check PorgramA.PAS file for errors
  370.     and the INTERFACE part of all unit it uses. IMPLEMENTATION part
  371.     of these units is ignored.
  372.  
  373. TSC ProgramA
  374.  
  375.     This means exactly what preceding line with "TSC /M ProgramA"
  376.     means. '/M' switch is factory set.
  377.  
  378. TSC /I..\SOURCE/U..\LIBS MyMain.P
  379.  
  380.     This means add "..\SOURCE" to Include files path, add "..\LIBS"
  381.     to Unit Files path, and then process MyMain.P source file.
  382.  
  383. TSC /DDEBUG MainFile.OLD
  384.  
  385.     This means define a directive name "DEBUG" for all units that will
  386.     be processed in this session and then start checking with file
  387.     MainFile.OLD.
  388.  
  389.  
  390. CREATING YOUR .TDL LIBRARIES
  391. ----------------------------
  392.  
  393. To support the Turbo Pascal provided units of SYSTEM, DOS, CRT and
  394. others, TSC program uses a its own library format via .TDL files. These
  395. files are very easy to create. Remember that TSC first looks for a '.PAS'
  396. file for the units and only then for a '.TDL' file. Thus a '.TDL' file
  397. would need to be created only if you do not have source for the unit.
  398.  
  399. A '.TDL' library file has the following format:
  400.  
  401. UNIT UnitName;
  402. INTERFACE
  403. {*** declarations for the unit go here ****}
  404. IMPLEMENTATION
  405. {*** This implementation section is completely ignored by TSC program.
  406.     Thus it may be empty or a copy of the actual source.
  407. ****}
  408. END.
  409.  
  410. HOW TSC PROGRAM OPERATES?
  411. -------------------------
  412.  
  413. This chapter deals with how TSC program goes about making decisions that
  414. will enable it to locate all the files that it needs. The steps that TSC
  415. program takes are very much like what the TPC.EXE (command line version
  416. of your compiler) or the TURBO.EXE (interactive version of your compiler)
  417. program does.
  418.  
  419. Four different DOS PATH like strings are used to locate files of different
  420. types that TSC will work with. These correspond to the path strings used by
  421. the compiler programs to locate files.
  422.  
  423. These file types are
  424.  
  425.   Unit files(via /U switch), these are the source files that contain the
  426.     programs and units that will be either used or checked.
  427.  
  428.   Obj files(via /O switch), these are the external assembler created .OBJ
  429.     files that are linked in with the $L compiler directives.
  430.  
  431.   Included files(via /I switch), these files are included into source code
  432.     using the $I directive, and are different from unit files.
  433.  
  434.   Turbo files(via /T switch), these are the TURBO.TP, TPC.CFG and
  435.     all of the .TDL library files that TSC program uses.
  436.  
  437. See page 163 and chapter 12 "Command Line Reference" of Turbo Pascal manual for
  438. detailed discussion of these paths. /T path of TURBO.EXE and TPC.EXE programs
  439. is used for TSC program files too.
  440.  
  441. TSC program adds on default extensions to your file names. The source
  442. file (included, program and unit files) are given a '.PAS' extension if
  443. a file name without an extension is given. These are the main file to be
  444. checked and the /I and /U path files. A default extension of '.OBJ' is
  445. used for /O path files. No default extension is used for /T path files
  446. and they must be specified along with their complete name and extension.
  447. To use a file name with no extension, use a period '.' at its end.
  448.  
  449. The above discussed four paths may be set in TURBO.TP file, TPC.CFG file or
  450. could have been given from command line.
  451.  
  452. TSC program reads in the command line paths and the switches given.
  453. The -CFG switch tells it to go and look for paths in TPC.CFG file.
  454. The -TP switch tells it to go look for TURBO.TP file. The -TP switch is the
  455. default and is not needed. If it can not find the file, TSC program halts.
  456.  
  457. TSC then reads either TURBO.TP file or TPC.CFG file. All of the paths
  458. located in either of these files are then concatenated to the end of
  459. any command line paths given. This will cause path set via command line to
  460. be searched before the TURBO.TP and TPC.CFG paths.
  461.  
  462. TSC program then completes the definition of SYSTEM unit by loading in
  463. SYSTEM.TDL file.
  464.  
  465. Notes On Turbo Pascal Version 4.0
  466.  
  467. Turbo Pascal version 4 is a very good compiler for developing
  468. applications on microcomputers. Even in a product of such a calibre,
  469. there are a few anomalies that programmers should be aware of.
  470. TSC attempts to "support" these quirks when they do not involve
  471. serious consequences:
  472.  
  473. -----------------------------------------
  474. Consider a code fragment like:
  475.  
  476.  
  477. {$UNDEF NEVER}
  478. {$IFDEF NEVER}
  479. ...
  480.     (* this comment is never closed off
  481. {$ENDIF}
  482.  
  483.  
  484. The Turbo Pascal manual says that all text between the {$IFDEF NEVER}
  485. directive and {$ENDIF} directive would be ignored. But the compiler
  486. fails to find the {$ENDIF} directive. It has to find the end of the
  487. comment that you started before it will recognize anything else at
  488. all. TSC was programmed to do exactly the same.
  489.  
  490. -----------------------------------------
  491. Consider another code fragment like:
  492.  
  493.  
  494. TYPE
  495.   ChA : array[1..2] of char;
  496. VAR
  497.   X : INTEGER;
  498.   ChA1, ChA2 : ChA absolute X;
  499.  
  500.  
  501. The Turbo Pascal manual says you can not use a list of variable names
  502. to delare them to be absolute to same variable. You must do them one
  503. by one, each in a separate declaration. Version 4.0 of the compiler
  504. does not catch this error. So be warned against such usages. TSC was
  505. prgrammed again not to catch such usages.
  506.  
  507.  
  508. -----------------------------------------
  509. This one is not a bug but a situation which has no impact on the
  510. way your program will work:
  511.  
  512. type
  513.     s : packed string[9];
  514.  
  515. The manual says you can use PACKED before structured types. But
  516. you can also do so before the string type declaration.
  517. We just wanted to let you know that like the compiler, TSC does
  518. not catch this.
  519.  
  520. -----------------------------------------
  521. Now consider a tricky bug as shown below:
  522.  
  523.  
  524. function A : integer;
  525. var A : integer;
  526. begin
  527.   A := 10;
  528. end;
  529.  
  530.  
  531. What we have here is that a variable with the same name as the function
  532. being declared. The value will get assigned to the local variable.
  533. Neither Turbo Pascal nor TSC can trap this kind of error, since such
  534. usage is perfectly legal.
  535.  
  536.  
  537. TECHNICAL NOTES AND CAPABILITIES DISCUSSION
  538. -------------------------------------------
  539.  
  540. TSC was written using Version 4 of Turbo Pascal compiler running on
  541. a Kaypro 286 computer. A beta version of TDebug Plus from Turbo Power
  542. Software was used for debugging purposes.
  543.  
  544. TSC is not a compiler. To compile your applications you still need
  545. to use the Turbo Pascal compiler.
  546.  
  547. TSC program can NOT read .TPU units generated by the compiler.
  548.  
  549. If your unit source file name is different from the unit name, you must
  550. use the $U directive to provide the complete file name where ever you use
  551. the unit.
  552.  
  553. You can check units or program source files. TSC processes units that
  554. are being used in very much the same manner as the Turbo Pascal compiler
  555. does. When it encounters the USES statement, it starts interfacing these
  556. used units. If a unit is builtin (loaded via .TDL libraries), the defintions
  557. of that unit are linked in. If it is a new unit, we start checking this
  558. new unit for errors and build up its definitions. When this unit checking
  559. will be completed we will return and continue with the original unit we
  560. were checking. It is therfore very important that USES statements be
  561. correctly written. TSC can not guess as to what you wanted when you say
  562. typed in a wrong unit name. It will treat units related errors (Turbo
  563. Pascal error numbers 68..72 and 84) as fatal. These must be corrected
  564. before any further processing can occur.
  565.  
  566. Since you are allowed to override the need for having a coprocessor to
  567. develop applications containing 8087 data types (SINGLE/DOUBLE/EXTENDED/
  568. COMP), TSC can not do a range check on constants involving all real data
  569. types. It still checks for type compatibility when real data types
  570. are used. The constants are still checked for being of right format as
  571. discussed on page 199 of Turbo Pascal manual.
  572.  
  573. All real number constants are treated as being of type REAL.
  574.  
  575. Errors in 8087 data types, whether while defining or while using them
  576. are always reported as error no 116, "Must be in 8087 mode to compile
  577. this."
  578.  
  579. Compiling of source files containing 8087 data types still requires a
  580. computer having a math coprocessor installed. TSC will help you by finding
  581. your syntax errors.
  582.  
  583. No checks are performed on the size of variables or values being
  584. typecasted to a different type.
  585.  
  586. For inline statements and inline procedure declarations, TSC does not
  587. catch any errors relating to size of integer constants used.
  588.  
  589. Like the Turbo Pascal compiler, TSC can not find out if more than 8
  590. value parameters of 8087 data types are being used in the parameter
  591. list of a procedure or a function.
  592.  
  593. The development of applications when you are using external assembler
  594. routines is facilitated by the fact that TSC can find more than one errors.
  595. Even if .OBJ file is not ready yet, you can complete development of the
  596. rest of the source code. You must still write the interface part of
  597. the procedure or the function. Just ignore the "File not found error"
  598. you get for missing .OBJ file.
  599.  
  600. SYSTEM.TDL library file must be loaded before checking can begin.
  601.  
  602.